import Vue from 'vue'
import App from './App.vue'

//导入路由
import router from './router'

//导入 elemen-ui
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

//导入 axios
import axios from '@/http'

//导入正则校验函数
import { nameTest, pwdTest } from './utils/reg.js'

//导入 store
import store from './store'



//响应拦截器
axios.interceptors.response.use(function(response) {
	//获取响应数据
	let data = response.data;
	if (data) {
		//如果里面有 token，更新 token
		if (data.token) {
			store.commit('setToken', data.token);
		}
		//如果有 管理员id，保存
		if (data.user && data.user.id) {
			store.commit('setUid', data.user.id);
		}
	}
	return response;
})
//请求拦截器
axios.interceptors.request.use(function(request) {
	//获取 id 跟 token
	let id = store.state.uid;
	let token = store.state.token;
	//如果有才添加
	if (token != '' && id != '') {
		//设置 id 跟 token
		request.headers.authorization = token;
		//如果他有我们就不要改变原本的属性，只添加 id
		if (request.params) request.params.id = id;
		//如果没有就创一个新对象，里面有 id
		else request.params = {id};
	}
	return request;
})
//路由守卫，配置前置操作
router.beforeEach((to, from, next) => {
	//登录的话直接放行
	if (to.path == '/login') next();
	//如果不是去登录页就检查有没有登录过
	else {
		//如果能获取到用户列表说明登录过了
		axios.get('/users/backend/list')
			.then(({data: {code}}) => {
				//获取失败，去登录
				if (code != 1) router.push('/login');
				//获取成功
				else next();
			})
	}
})
//将 axios 放到 Vue 原型上
Vue.prototype.$http = axios
//将 store 放到 Vue 原型上
Vue.prototype.$store = store
//将 正则校验函数 放到 Vue 原型上
Vue.prototype.$nameTest = nameTest;
Vue.prototype.$pwdTest = pwdTest;
//使用 element-ui
Vue.use(ElementUI);
// 关闭生产提示
Vue.config.productionTip = false;

// 创建并挂载 Vue 实例
new Vue({
	// 渲染根组件
	render: h => h(App),
	// 将路由配置添加到 Vue 实例中
	router,
}).$mount('#app'); // 挂载到 id 为 'app' 的 DOM 元素上